import { defineStore } from 'pinia';
import { reactive } from 'vue';
import { geturlparam } from '@/utils/util';

interface UserInfo {
  uid: string;
  rid: string;
  headimg: string; // 用户头像
  mobile: string; // 用户手机号
  nickname: string; // 用户昵称
  pubcnt: number; // 我发布的数量
  salecnt: number; // 我卖出的数量
  buycnt: number; // 我买到的数量
  jifen: 0; // 我的积分
  needjifen: 0; // 发布商品所需积分
  tips: ''; // 发布商品积分不足提示
  canshenhe: boolean; // 是否显示审核入口
}

export const useUserInfo = defineStore(
  'userInfo',
  () => {
    const urlParam = geturlparam(); // 获取url地址参数

    const state = reactive<UserInfo>({
      uid: '',
      rid: '',
      headimg: '',
      mobile: '',
      nickname: '',
      pubcnt: 0,
      salecnt: 0,
      buycnt: 0,
      jifen: 0,
      needjifen: 0,
      tips: '',
      canshenhe: false,
    });

    /**
     * 设置用户信息
     */
    function setUserInfo(value: Partial<UserInfo>) {
      Object.assign(state, value);
    }

    /**
     * 尝试从地址栏获取参数登录
     */
    function urlLogin() {
      const uid = urlParam.get('uid') || '';
      const rid = urlParam.get('rid') || '';
      if (uid && rid) {
        state.uid = uid;
        state.rid = rid;
      }
    }

    /**
     * 退出登录
     */
    function loginOut() {
      state.uid = '';
      state.rid = '';
    }

    /**
     * 验证是否登录
     */
    function isLogin() {
      return !!state.uid && !!state.rid;
    }

    return { state, urlLogin, loginOut, isLogin, setUserInfo };
  },
  {
    persist: true,
  }
);
